home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib12.dsk / LIBRARIAN FILER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  17KB  |  313 lines

  1. 1  REM   ***********************
  2. 2  REM   * LIBRARIAN FILER     *
  3. 3  REM   * BY GEORGE D. PARKER *
  4. 4  REM   * COPYRIGHT (C) 1983  *
  5. 5  REM   * BY MICROSPARC, INC. *
  6. 6  REM   * LINCOLN, MA. 01773  *
  7. 7  REM   ***********************
  8. 100  TEXT : HOME : PRINT  CHR$(4);"MAXFILES 1"
  9. 110  HIMEM: 39167
  10. 120  VTAB 5: HTAB 9: PRINT "NIBBLE LIBRARIAN FILER": VTAB 8: HTAB 19: PRINT "BY": VTAB 10: HTAB 12: PRINT "GEORGE D. PARKER"
  11. 125  PRINT : PRINT "COPYRIGHT (C) 1983 BY MICRO-SPARC, INC": PRINT "       ** ALL RIGHTS RESERVED **"
  12. 130  DIM P%(700),P$(700):D$ =  CHR$(4):B$ =  CHR$(7):NUM = 0:N = 0:Z$ = "< >" + CHR$(8) + CHR$(8)
  13. 140 BL$ = "                                      ":P$(0) = BL$:TAB$ =  LEFT$(BL$,10): REM   BL$ IS 38 SPACES
  14. 150  PRINT D$;"BLOAD BUBBLE.OBJ,D1"
  15. 160  ONERR  GOTO 700
  16. 170  POKE 768,104: POKE 769,168: POKE 770,104: POKE 771,166: POKE 772,223: POKE 773,154: POKE 774,72: POKE 775,152: POKE 776,72: POKE 777,96: REM     ERR ROUTINE PAGE 82, APPLESOFT REFERENCE MANUAL      
  17. 180 OP$ = D$ +"OPEN ":RE$ = D$ +"READ ":CL$ = D$ +"CLOSE ":WR$ = D$ +"WRITE ":CA$ = D$ +"CATALOG"
  18. 190  VTAB 23: PRINT "DO YOU WANT INSTRUCTIONS? <Y> <N>: ";Z$;: GET A$: PRINT A$: IF A$ = "Y"  THEN 500
  19. 200  HOME : VTAB 3: PRINT "MENU:": PRINT 
  20. 210  PRINT "  <1>  GET MASTER CATALOG FILE"
  21. 220  PRINT "  <2>  SAVE MASTER CATALOG FILE"
  22. 230  PRINT "  <3>  SORT MASTER CATALOG"
  23. 240  PRINT "  <4>  PRINT MASTER CATALOG"
  24. 250  PRINT "  <5>  LOCATE ENTRIES IN CATALOG"
  25. 260  PRINT "  <6>  ADD ENTRIES"
  26. 270  PRINT "  <7>  DELETE ENTRIES"
  27. 280  PRINT "  <8>  EDIT ENTRIES"
  28. 290  PRINT "  <9>  EXIT LIBRARIAN FILER"
  29. 300  PRINT : PRINT "     CHOICE? ";Z$;: GET A$: PRINT A$:A =  ASC(A$) -48
  30. 310  IF A <1  OR A >9  THEN  PRINT B$;: GOTO 300
  31. 320  ON A GOTO 1000,2000,3000,4000,5000,6000,7000,8000,9000
  32. 500  HOME 
  33. 510  PRINT "   THIS IS THE SECOND PART OF A THE   ": PRINT "NIBBLE LIBRARIAN SYSTEM.  WHILE THE": PRINT "PROGRAM 'CATALOGER' CREATES THE INITIAL": PRINT "DATA BASE BY READING CATALOGS, THIS"
  34. 520  PRINT "PART DOES THE ACTUAL MANAGEMENT."
  35. 530  PRINT : PRINT "   THE PROGRAM IS MENU DRIVEN AND ": PRINT "ALLOWS THE USER TO COMBINE DATA BASES,": PRINT "ADD OR DELETE OR EDIT OR SORT ENTRIES,": PRINT "AND PRINT OUT THE MASTER CATALOG. THE "
  36. 540  PRINT "CATALOG MAY CONTAIN UP TO 700 ENTRIES."
  37. 550  PRINT : PRINT "   THE SORT ROUTINE ALLOWS SORTING BY": PRINT "VOLUME, FILETYPE, OR FILENAME."
  38. 560  PRINT : PRINT "   THE PRINT ROUTINE ALLOWS FOR TWO": PRINT "OPTIONS -- SCREEN AND PRINTER.  THE": PRINT "PRINTER OPTION MAY NEED TO BE REVISED": PRINT "TO WORK WITH YOUR PRINTER."
  39. 570  VTAB 23: PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT A$
  40. 580  HOME : PRINT "  IF BY MISTAKE YOU SHOULD EXIT THE ": PRINT "PROGRAM (BY AN ILLEGAL ENTRY?) YOU MAY": PRINT "RE-ENTER THE PROGRAM WITH 'GOTO 10000'."
  41. 590  PRINT : PRINT "  THIS WILL NOT WORK IF YOU MAKE A": PRINT "NORMAL EXIT VIA THE MENU BECAUSE THERE": PRINT "WILL HAVE BEEN A CHANGE IN THE NUMBER": PRINT "OF FILE BUFFERS (MAXFILES)."
  42. 600  PRINT : PRINT "  MOST ANSWERS TO QUESTIONS REQUIRE A": PRINT "SINGLE KEYSTROKE AND NO RETURN.  THIS": PRINT "IS INDICATED BY CHOICES IN BRACKETS <>.": PRINT "ILLEGAL ENTRIES WILL BE TRAPPED AND YOU"
  43. 610  PRINT "WILL BE PROMPTED TO RESPOND AGAIN."
  44. 620  VTAB 23: PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: GOTO 200
  45. 700  CALL 768
  46. 710  PRINT : PRINT D$;"CLOSE":Y =  PEEK(222)
  47. 720  IF Y = 5  THEN  PRINT B$;"PREMATURE END OF DATA ON FILE ";F$: PRINT "CANNOT READ MORE.":N = N +I -1:NUM = NUM +I -1: CALL  -958: GOTO 1070
  48. 730  IF Y = 4  THEN  PRINT B$;"DISK IS WRITE PROTECTED.": CALL  -958: GOTO 800
  49. 740  IF Y = 9  THEN  PRINT B$;"DISK IS FULL.": CALL  -958: GOTO 800
  50. 750  IF Y = 10  THEN  PRINT B$;"FILE IS LOCKED.": CALL  -958: GOTO 800
  51. 760  IF Y = 8  THEN  PRINT B$;"I/O ERROR.": CALL  -958: GOTO 810
  52. 770  IF Y = 255  THEN  PRINT B$;"CTRL-C INTERRUPT": GOTO 810
  53. 780  IF Y = 254  THEN  PRINT B$;"NUMERICAL ENTRY EXPECTED": PRINT : RESUME 
  54. 790  PRINT B$;"APPLESOFT OR DOS ERROR NUMBER ";Y;" HAS": PRINT "OCCURRED.  SEE PAGE 81 OF APPLESOFT": PRINT "REFERENCE MANUAL AND PAGE 200 OF DOS": PRINT "MANUAL FOR LIST OF ERROR CODES.": GOTO 810
  55. 800  PRINT : PRINT "REPLACE DISK IN DRIVE 1 IF NEEDED.": PRINT : PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: GOTO 2000
  56. 810  PRINT : PRINT "PRESS RETURN TO GO TO MAIN MENU ";Z$;: GET A$
  57. 820  GOTO 200
  58. 1000  HOME 
  59. 1010  PRINT "  GET MASTER CATALOG"
  60. 1020  PRINT : PRINT "WHAT IS NAME OF CATALOG FILE? (ENTER *": PRINT : PRINT "TO ABORT OR @ TO LIST CATALOG OF MASTER": PRINT : PRINT "DISK.) ";: INPUT F$
  61. 1030  IF  LEN(F$) = 0  THEN  PRINT B$;: GOTO 1010
  62. 1040  IF F$ = "*" GOTO 200
  63. 1050  IF F$ < >"@"  THEN 1080
  64. 1060  PRINT CA$",D1"
  65. 1070  PRINT : PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT : PRINT : PRINT : GOTO 1010
  66. 1080  PRINT : PRINT : PRINT : PRINT 
  67. 1100  VTAB 23: HTAB 17: FLASH : PRINT "READING": NORMAL : VTAB 14
  68. 1110  PRINT OP$;F$
  69. 1120  PRINT RE$;F$
  70. 1130  ONERR  GOTO 1170: REM   SPECIAL ERROR TRAP FOR EMPTY FILE
  71. 1140  INPUT M
  72. 1150  ONERR  GOTO 700
  73. 1160  GOTO 1210
  74. 1170  ONERR  GOTO 700
  75. 1180  IF  PEEK(222) < >5 GOTO 700
  76. 1190  PRINT CL$: CALL  -958
  77. 1200  PRINT B$;"FILE '";F$;"' IS EMPTY.": PRINT : PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT : GOTO 1020
  78. 1210  IF M +N < = 700  THEN 1250
  79. 1220  VTAB 23: PRINT B$;"CANNOT LOAD FILE -- TOO BIG.  THE FILE": PRINT "IN RAM HAS ";N;" ENTRIES AND THE FILE": PRINT "'"F$;"' HAS ";M;" ENTRIES."
  80. 1230  PRINT CL$: PRINT 
  81. 1240  PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT : GOTO 200
  82. 1250  FOR I = 1 TO M: INPUT P$(N +I):P%(NUM +I) = N +I: NEXT 
  83. 1260 N = N +M:NUM = NUM +M: PRINT CL$;F$
  84. 1270  VTAB 21: PRINT "THE CATALOG NOW HAS ";NUM;" ENTRIES."
  85. 1280  VTAB 23: PRINT "MERGE ANOTHER CATALOG? <Y> <N>: ";B$;Z$;: GET A$: PRINT A$: IF A$ = "Y"  THEN  PRINT : PRINT : GOTO 1010
  86. 1290  GOTO 200
  87. 2000  HOME 
  88. 2010  PRINT "  SAVE MASTER CATALOG"
  89. 2020  PRINT : PRINT "DO YOU WISH TO SORT BEFORE SAVING?": PRINT "  <Y>, <N>, OR <*> TO ABORT: ";Z$;: GET A$: PRINT A$
  90. 2030  IF A$ = "*"  THEN 200
  91. 2040  IF A$ = "Y"  THEN 3000
  92. 2050  IF A$ < >"N"  THEN  PRINT B$;: GOTO 2010
  93. 2060  PRINT : PRINT "SAVE IN FILE  '";F$;"' ?": PRINT "<Y> <N>: ";Z$;: GET A$: PRINT A$: IF A$ = "Y"  THEN 2120
  94. 2070  PRINT : PRINT "WHAT FILENAME? (ENTER @ TO LIST THE": PRINT "CATALOG OF YOUR MASTER DISK) ";: INPUT F$
  95. 2080  IF  LEN(F$) = 0  THEN  PRINT B$;: GOTO 2070
  96. 2090  IF F$ < >"@"  THEN 2120
  97. 2100  PRINT CA$;",D1"
  98. 2110  PRINT : PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT : PRINT : GOTO 2070
  99. 2120 N$ =  LEFT$( STR$(NUM) +"    ",5)
  100. 2130  PRINT : VTAB 23: HTAB 16: FLASH : PRINT "WRITING": NORMAL 
  101. 2140  PRINT OP$;F$: PRINT WR$;F$
  102. 2150  PRINT N$
  103. 2160  FOR I = 1 TO NUM: PRINT P$(P%(I)): NEXT 
  104. 2170  PRINT CL$;F$
  105. 2180  VTAB 23: PRINT "PRESS RETURN TO CONTINUE  ";B$;Z$;: GET A$: GOTO 200
  106. 3000  HOME 
  107. 3010  PRINT "  SORT MASTER CATALOG"
  108. 3020  VTAB 4: PRINT "  A STANDARD SORT IS DOUBLE -- PRIMARY": PRINT "BY FILENAME AND SECONDARY BY VOLUME."
  109. 3030  PRINT : PRINT "YOU MAY MAKE A CUSTOM SORT BY USING": PRINT "OPTIONS 2,3,AND 4.  IF YOU WANT BOTH A": PRINT "PRIMARY AND SECONDARY SORT, DO THE": PRINT "SECONDARY SORT FIRST."
  110. 3040  PRINT : PRINT "MENU:": PRINT 
  111. 3050  PRINT "  <1>  STANDARD SORT"
  112. 3060  PRINT "  <2>  SORT BY FILENAME"
  113. 3070  PRINT "  <3>  SORT BY VOLUME"
  114. 3080  PRINT "  <4>  SORT BY FILETYPE (A,B,I,R,T)
  115. 3090  PRINT "  <5>  EXIT AND RETURN TO MAIN MENU"
  116. 3100  PRINT : PRINT "      CHOICE? ";Z$;: GET A$: PRINT A$: PRINT :A =  ASC(A$) -48
  117. 3110  IF A <1  OR A >5  THEN  PRINT B$;: GOTO 3100
  118. 3120  IF A = 5  THEN 200
  119. 3130  VTAB 23: HTAB 17: FLASH : PRINT "SORTING": NORMAL 
  120. 3140  IF A = 1  THEN OFFSET = 3:NCHRS = 30:FLAG = 3
  121. 3150  IF A = 2  THEN OFFSET = 3:NCHRS = 30:FLAG = 0
  122. 3160  IF A = 3  THEN OFFSET = 0:NCHRS = 3:FLAG = 0
  123. 3170  IF A = 4  THEN OFFSET = 33:NCHRS = 1:FLAG = 0
  124. 3180  POKE 963,FLAG
  125. 3190  POKE 964,OFFSET
  126. 3200  POKE 965,NCHRS
  127. 3210  POKE 954,NUM -256 * INT(NUM/256)
  128. 3220  POKE 955, INT(NUM/256)
  129. 3230  CALL 39168P$(0),P%(0)
  130. 3235  VTAB 23: HTAB 14: PRINT "SORT COMPLETE": PRINT : PRINT 
  131. 3240  VTAB 23: PRINT B$;" TIME TO MAKE A NEW CHOICE (1 - 5)": GOTO 3100
  132. 4000  HOME 
  133. 4010  PRINT "  PRINT CATALOG"
  134. 4020  PRINT : PRINT "OPTIONS:": PRINT 
  135. 4030  PRINT "   <1>  SCREEN OUTPUT"
  136. 4040  PRINT "   <2>  PRINTER OUTPUT"
  137. 4050  PRINT "   <3>  EXIT"
  138. 4060  PRINT : PRINT "    CHOICE? ";Z$;: GET A$: PRINT A$:B =  ASC(A$) -48
  139. 4070  IF B <1  OR B >3  THEN  PRINT B$;: GOTO 4060
  140. 4080  IF B < >2  THEN 4150
  141. 4090  PRINT : PRINT "TYPE OF PRINTER?": PRINT 
  142. 4100  PRINT "  <1> SILENTYPE"
  143. 4110  PRINT "  <2> EPSON"
  144. 4120  PRINT : PRINT "     WHICH? ";Z$;: GET A$: PRINT A$:PT =  ASC(A$) -48
  145. 4130  IF PT <1  OR PT >2  THEN  PRINT B$;: GOTO 4120
  146. 4140  IF PT = 2  THEN  PRINT : PRINT B$;"BE SURE TO POSITION PAPER AT THE TOP OF": PRINT "A SHEET WITH THAT DEFINED AS  'TOF'.": PRINT "(TURN PRINTER OFF AND ON TO BE SURE.)"
  147. 4150  IF B = 3  THEN 200
  148. 4160  PRINT : PRINT "OPTIONS:"
  149. 4170  PRINT : PRINT "   <1>  ENTIRE CATALOG (AS SORTED)"
  150. 4180  PRINT "   <2>  SINGLE VOLUME"
  151. 4190  PRINT "   <3>  SINGLE FILETYPE"
  152. 4200  PRINT : PRINT "    CHOICE? ";Z$;: GET A$: PRINT A$:A =  ASC(A$) -48: IF A <1  OR A >3  THEN  PRINT B$;: GOTO 4200
  153. 4210  IF A = 2  THEN  PRINT : PRINT "WHAT VOL? ";: INPUT VOL$:VOL$ =  RIGHT$("000" +VOL$,3):FF$ = "N": IF (B = 2)  AND (PT = 2)  THEN  PRINT : PRINT "DO YOU WANT A FORM FEED BEFORE PRINTING? <Y> <N>: ";Z$;: GET FF$: PRINT FF$
  154. 4220  IF A = 3  THEN  PRINT : PRINT "WHAT FILETYPE? <A> <B> <I> <R> <S> <T>: ";Z$;: GET T$: PRINT T$
  155. 4230  IF B = 2  THEN 4390
  156. 4240  HOME : PRINT "VOL  FILENAME (SHORT)     TYPE  LEN"
  157. 4250  PRINT "-----------------------------------"
  158. 4260  VTAB 22: PRINT "-----------------------------------"
  159. 4270  VTAB 23: PRINT "PRESS RETURN FOR MORE OR ESCAPE TO STOP";: POKE 34,2: POKE 35,21: VTAB 3: HTAB 1:K = 0
  160. 4280  FOR I = 1 TO NUM
  161. 4290  IF A = 1  THEN 4320
  162. 4300  IF A = 2  THEN  IF  LEFT$(P$(P%(I)),3) < >VOL$ GOTO 4360
  163. 4310  IF A = 3  THEN  IF  MID$ (P$(P%(I)),34,1) < >T$ GOTO 4360
  164. 4320  PRINT  LEFT$(P$(P%(I)),3);"  "; MID$ (P$(P%(I)),4,20);"  "; MID$ (P$(P%(I)),34,2);"  "; RIGHT$(P$(P%(I)),3);
  165. 4330 K = K +1: IF K < >19  THEN  PRINT : GOTO 4360
  166. 4340  PRINT " ";B$;Z$;: GET A$: IF A$ =  CHR$(27)  THEN I = NUM: GOTO 4360
  167. 4350  PRINT :K = 1
  168. 4360  NEXT 
  169. 4370  POKE 34,0: POKE 35,24: VTAB 23: HTAB 1: PRINT B$;"PRESS RETURN FOR PRINT MENU         ";B$;Z$;
  170. 4380  GET A$: PRINT : GOTO 4020
  171. 4390  PRINT : PRINT "USE  '";F$;"'  AS PRINT-OUT LABEL?": PRINT "IF YES, PUSH RETURN;": PRINT "ELSE, ENTER AN ALTERNATIVE LABEL.": INPUT LA$: IF  LEN(LA$) = 0  THEN LA$ = F$
  172. 4395  PRINT : INPUT "ENTER DATE - MM/DD/YY: ";DA$
  173. 4400 L1$ = TAB$ + LEFT$(LA$ +BL$,30) + RIGHT$(BL$ +DA$,20)
  174. 4405 L2$ = TAB$ +"VOL   FILENAME                        TYPE  LENGTH"
  175. 4410 L3$ = TAB$ +"--------------------------------------------------"
  176. 4415  REM    STRINGS IN 4405 AND 4410 HAVE 50 CHARACTERS
  177. 4420  PR# 1
  178. 4430  IF PT = 2  THEN  PRINT  CHR$(9);"80N": IF FF$ = "Y"  THEN  PRINT  CHR$(12)
  179. 4440  GOSUB 4600
  180. 4450  FOR I = 1 TO NUM
  181. 4455  IF K = 57  THEN  PRINT : PRINT : PRINT : GOSUB 4600
  182. 4460  IF A = 1  THEN 4490
  183. 4470  IF A = 2  THEN  IF  LEFT$(P$(P%(I)),3) < >VOL$ GOTO 4500
  184. 4480  IF A = 3  THEN  IF  MID$ (P$(P%(I)),34,1) < >T$  THEN 4500
  185. 4490  GOSUB 4530
  186. 4500  NEXT 
  187. 4510  PR# 0
  188. 4520  PRINT : PRINT B$;"PRESS RETURN FOR PRINT MENU ";Z$;: GET A$: PRINT : GOTO 4010
  189. 4530  PRINT TAB$; LEFT$(P$(P%(I)),3);"   "; MID$ (P$(P%(I)),4,30);"   "; MID$ (P$(P%(I)),34,2);"    "; RIGHT$(P$(P%(I)),3)
  190. 4535 K = K +1
  191. 4540  RETURN 
  192. 4600  PRINT : PRINT 
  193. 4610  PRINT L1$: PRINT 
  194. 4620  PRINT L2$: PRINT L3$: PRINT 
  195. 4630 K = 1
  196. 4640  RETURN 
  197. 5000  HOME 
  198. 5010  PRINT "  LOCATE ENTRIES"
  199. 5020  PRINT : PRINT "  THIS SEGMENT WILL LOCATE ALL ENTRIES": PRINT "WHOSE FILENAME BEGINS WITH WHAT YOU": PRINT "ENTER BELOW."
  200. 5030  PRINT : PRINT "ENTER FILENAME  (* TO EXIT)": INPUT NAME$:L =  LEN(NAME$)
  201. 5040  IF L = 0  THEN  PRINT B$;: GOTO 5030
  202. 5050  IF NAME$ = "*"  THEN 200
  203. 5060 K = 0: PRINT : PRINT : PRINT : GOSUB 5160
  204. 5070  FOR I = 1 TO NUM
  205. 5080  IF  MID$ (P$(P%(I)),4,L) < >NAME$  THEN 5110
  206. 5090  GOSUB 5140:K = K +1: IF K < >20 * INT(K/20)  THEN 5110
  207. 5100  PRINT : PRINT "PRESS RETURN FOR MORE ";Z$;: GET A$: PRINT : PRINT : GOSUB 5160
  208. 5110  NEXT 
  209. 5120  PRINT : PRINT B$;"   THAT'S ALL"
  210. 5130  PRINT : PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: GOTO 200
  211. 5140  PRINT  RIGHT$("  " + STR$(I),3);"   "; LEFT$(P$(P%(I)),3);"   "; MID$ (P$(P%(I)),4,20);"  "; MID$ (P$(P%(I)),34,2)
  212. 5150  RETURN 
  213. 5160  PRINT "ENTRY VOL  FILENAME (SHORT)     TYPE"
  214. 5170  RETURN 
  215. 6000  HOME 
  216. 6010  PRINT "  ADD ENTRIES"
  217. 6020  PRINT : PRINT "ENTER <*> TO QUIT, <RET> TO CONTINUE:    ";Z$;: GET A$: PRINT A$
  218. 6030  IF A$ = "*"  THEN 200
  219. 6040  IF N <700  THEN 6080
  220. 6050  PRINT : PRINT B$ +"CANNOT ADD ENTRIES -- NO ROOM": PRINT : PRINT "THERE ARE ";NUM;" ENTRIES PLUS ";N -NUM;: PRINT " DELETED ENTRIES."
  221. 6060  PRINT : PRINT "BY SAVING THE FILE AND THEN RESTARTING": PRINT "YOU CAN RECOVER THE SPACE HELD BY THE": PRINT "DELETED ENTRIES."
  222. 6070  PRINT : PRINT "PRESS RETURN TO CONTINUE ";Z$;: GET A$: PRINT : GOTO 200
  223. 6080  PRINT : PRINT : PRINT "ENTRY NUMBER ";NUM +1
  224. 6090  PRINT "   VOL: ";: INPUT VOL$
  225. 6100  PRINT "   NAME: ";: INPUT NAME$
  226. 6110  PRINT "   TYPE: ";: INPUT T$
  227. 6120  PRINT "   LENGTH: ";: INPUT L$
  228. 6130 NUM = NUM +1:N = N +1:P%(NUM) = N
  229. 6140 P$(N) =  RIGHT$("00" +VOL$,3) + LEFT$(NAME$ +BL$,30) + LEFT$(T$ +" ",2) + RIGHT$("  " +L$,3)
  230. 6150  PRINT : PRINT "ANOTHER ENTRY? <Y> <N>: ";Z$;: GET A$: PRINT A$
  231. 6160  IF A$ = "Y"  THEN 6040
  232. 6170  GOTO 200
  233. 7000  HOME 
  234. 7010  PRINT "  DELETE ENTRIES"
  235. 7020  PRINT : PRINT "  <1> SELECT BY ENTRY NUMBER"
  236. 7030  PRINT "  <2> SELECT BY NAME"
  237. 7040  PRINT "  <3> QUIT"
  238. 7050  PRINT : PRINT "     CHOICE? ";Z$;: GET A$: PRINT A$:A =  ASC(A$) -48
  239. 7060  IF A <1  OR A >3  THEN  PRINT B$;: GOTO 7050
  240. 7070  ON A GOTO 7080,7160,200
  241. 7080  PRINT : INPUT "ENTRY NUMBER? ";I
  242. 7090  IF I <1  OR I >NUM  THEN  PRINT B$;"DOES NOT EXIST": GOTO 7080
  243. 7100  PRINT : PRINT "DELETE THIS ONE?"
  244. 7110  GOSUB 5140: PRINT Z$;: GET A$: PRINT A$: IF A$ < >"Y"  THEN 7010
  245. 7120 NUM = NUM -1: FOR K = I TO NUM:P%(K) = P%(K +1): NEXT 
  246. 7130  PRINT B$ +"       DELETED!"
  247. 7140  GOTO 7010
  248. 7150  GOTO 7090
  249. 7160  PRINT : INPUT "ENTRY NAME? ";NAME$:L =  LEN(NAME$):FLAG = 0:C = 0
  250. 7170  IF L = 0  THEN  PRINT B$;: GOTO 7160
  251. 7180  FOR J = 1 TO NUM:I = J -C
  252. 7190  IF  MID$ (P$(P%(I)),4,L) < >NAME$  THEN 7230
  253. 7200 FLAG = 1: PRINT : PRINT "DELETE THIS ONE? <Y> <N>": GOSUB 5140: PRINT Z$;: GET A$: PRINT A$
  254. 7205  IF A$ =  CHR$(27)  THEN 7010
  255. 7210  IF A$ < >"Y"  THEN 7230
  256. 7220 NUM = NUM -1: FOR K = I TO NUM:P%(K) = P%(K +1): NEXT : PRINT B$;"         DELETED            !":C = C +1
  257. 7230  NEXT : IF FLAG = 0  THEN  PRINT : PRINT B$;"NOT FOUND"
  258. 7240  GOTO 7010
  259. 8000  HOME 
  260. 8010  PRINT "  EDIT ENTRIES"
  261. 8020  PRINT : PRINT "MENU:"
  262. 8030  PRINT "  <1>  EDIT SINGLE ENTRY"
  263. 8040  PRINT "  <2>  EXAMINE ENTIRE FILE WITH OPTION": PRINT "         TO EDIT, DELETE OR SKIP"
  264. 8050  PRINT "  <3>  QUIT"
  265. 8060  PRINT : PRINT "     CHOICE? ";Z$;: GET A$: PRINT A$:A =  ASC(A$) -48
  266. 8070  IF A <1  OR A >3  THEN  PRINT B$;: GOTO 8060
  267. 8080  ON A GOTO 8090,8190,200
  268. 8090  PRINT : PRINT "ENTER FILENAME TO BE EDITED (* TO QUIT)": INPUT NAME$
  269. 8100  IF NAME$ = "*"  THEN 8010
  270. 8110 L =  LEN(NAME$): IF L = 0  THEN  PRINT B$;: GOTO 8090
  271. 8120 FLAG = 0: FOR I = 1 TO NUM
  272. 8130  IF  MID$ (P$(P%(I)),4,L) < >NAME$  THEN 8170
  273. 8140 FLAG = 1: PRINT : PRINT "EDIT THIS ONE? <Y> <N>": GOSUB 5140: PRINT Z$;: GET A$: PRINT A$
  274. 8145  IF A$ =  CHR$(27)  THEN 8010
  275. 8150  IF A$ < >"Y"  THEN 8170
  276. 8160  GOSUB 8360
  277. 8170  NEXT : IF FLAG = 0  THEN  PRINT : PRINT B$;"NOT FOUND": GOTO 8090
  278. 8180  PRINT : PRINT B$;"THAT'S ALL": GOTO 8010
  279. 8190  HOME : PRINT "COMMANDS:  <E> EDIT,  <D> DELETE,": PRINT "           <ESC> QUIT,  <RET> SKIP"
  280. 8200  PRINT "----------------------------------------"
  281. 8210  POKE 34,3:C = 0
  282. 8220  FOR J = 1 TO NUM:I = J -C
  283. 8230  PRINT "ENTRY ";I;":"
  284. 8240  GOSUB 5140
  285. 8250  PRINT : PRINT "COMMAND? ";Z$;: GET A$: PRINT A$
  286. 8260  IF A$ =  CHR$(13)  THEN 8330
  287. 8270  IF A$ = "D"  THEN 8320
  288. 8280  IF A$ =  CHR$(27)  THEN 8340
  289. 8290  IF A$ < >"E"  THEN  PRINT B$;: GOTO 8250
  290. 8300  GOSUB 8360
  291. 8310  GOTO 8330
  292. 8320 NUM = NUM -1: FOR K = I TO NUM:P%(K) = P%(K +1): NEXT : PRINT : PRINT B$;"       DELETED!":C = C +1: PRINT 
  293. 8330  NEXT 
  294. 8340  POKE 34,0
  295. 8350  GOTO 8010
  296. 8360  PRINT : PRINT "HERE IS THE COMPLETE ENTRY.  EDIT IT": PRINT "AS YOU WOULD A PROGRAM LINE USING ": PRINT "ESCAPE I,J,K, ETC. BE SURE NOT TO ": PRINT "CHANGE ITS LENGTH OR THE POSITION OF": PRINT "THE FILETYPE OR LENGTH"
  297. 8370  PRINT : PRINT "  V..NAME..........................T.LEN": REM     STRING HAS EXACTLY 40 CHARACTERS
  298. 8375  PRINT "  ";P$(P%(I));: FOR K = 1 TO  LEN(P$(P%(I))) +2: PRINT  CHR$(8);: NEXT : INPUT "->";X$
  299. 8380 L1 =  LEN(X$): IF L1 <38  THEN  PRINT : PRINT B$;"TOO SHORT -- TRY AGAIN": GOTO 8370
  300. 8390  IF L1 >38  THEN  PRINT : PRINT B$;"TOO LONG -- TRY AGAIN": GOTO 8370
  301. 8400 P$(P%(I)) = X$: PRINT 
  302. 8410  RETURN 
  303. 9000  HOME : PRINT "  EXIT"
  304. 9005  PRINT : PRINT B$;"BE SURE YOU HAVE SAVED YOUR CATALOG."
  305. 9010  PRINT : PRINT "DO YOU WANT TO END OR CONTINUE?"
  306. 9020  PRINT : PRINT "  1>  EXIT": PRINT "  2>  CONTINUE WITH FILER": PRINT "  3>  RETURN TO CATALOGER": PRINT 
  307. 9030  PRINT "     CHOICE? ";Z$;: GET A$: PRINT A$: PRINT :A =  ASC(A$) -48
  308. 9040  IF A <1  OR A >3  THEN 9030
  309. 9050  ON A GOTO 9070,200,9060
  310. 9060  PRINT D$"RUN LIBRARIAN CATALOGER"
  311. 9070  PRINT : PRINT B$: PRINT "BYE-"B$"BYE"
  312. 9080  PRINT D$"MAXFILES 3": END 
  313. 10000  GOTO 200: REM    RE-ENTRY VECTOR